<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      .box {
        color: green;
        font-size: 80px;
      }
    </style>
  </head>
  <body>
    <!-- 2. 创建一个在dom树上的根标签. 后面动态生成dom对象,会插入到这个div中,渲染要页面 -->
    <div id="root"></div>
    <!-- 1. 引入react.js以及react-dom.js
        注意: 要先引入react,后引入react-dom. 后面依赖前者
    -->
    <!-- 提供了React对象 -->
    <script src="./js/react.development.js"></script>
    <!-- ReactDOM -->
    <script src="./js/react-dom.development.js"></script>
    <script src="./js/babel.min.js"></script>
    <!-- type="text/babel" 告诉babel这个script里面的代码需要被编译 -->
    <script type="text/babel">
      // 3. 动态插入数据
      // <div>
      //   <p>用户名</p>
      // </div>
      const username = 'hj'
      // jsx中写的{} 叫做插值表达式.这个插值表达式中写的代码,可以当做js去解析执行.但是只能写js表达式
      const flag = false // flag为true,则添加box类名,否则不添加
      const div = (
        <div>
          <p className={flag ? 'box' : ''}>{username}</p>
          <p>{1}</p>
          <p>{'123'}</p>
          {/*这是jsx的注释*/}
          {/*布尔值可以写入插值表达式,但是不会渲染*/}
          <p>{false}</p>
          {/*数组中每一个元素都当做一个子节点渲染*/}
          <p>{[1, 2, 3]}</p>
          {/*不要直接渲染一个普通对象,会报错*/}
          {/*<p>{{ name: 'zs' }}</p>*/}
          <p style={{ color: 'red' }}>123</p>
          {/*函数不要直接渲染,会警告*/}
          {/*<p>{function(){}}</p>*/}
          <p
            onClick={function () {
              console.log(123)
            }}
          >
            按钮
          </p>
          <p>{null}</p>
          <p>{undefined}</p>
          <p>{NaN}</p>
          {/*<p>{if(true){console.log(1)}}</p>*/}
        </div>
      )

      // 4.根据react-dom提供的方法,可以根据虚拟dom创建真实dom,并插入到dom树上
      // 作用: 根据虚拟dom创建真实dom.然后把真实dom插入到root这个节点中
      ReactDOM.render(div, document.getElementById('root'))
    </script>
  </body>
</html>
